import request from '@/utils/request'
import axios from 'axios'

/**
 * 获取所有Facebook数据
 * @returns {Promise} - 返回Promise对象
 */
export function getFacebookData() {
  return request({
    url: '/facebook/all',
    method: 'get',
    timeout: 60000,
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    }
  }).then(response => {
    // 检查响应类型
    if (response === undefined || response === null) {
      return [];
    }
    
    let result = [];
    
    if (Array.isArray(response)) {
      // 返回原始数组
      result = response;
    } else if (response && typeof response === 'object' && response.code === 200) {
      // 标准格式：{code: 200, msg: "操作成功", data: {...}}
      if (response.data && response.data.list) {
        // 如果是分页数据 {code: 200, msg: "操作成功", data: {total: x, list: [...]}}
        result = response.data.list;
      } else if (Array.isArray(response.data)) {
        // 如果data本身就是数组
        result = response.data;
      } else if (response.data) {
        // 其他data格式，直接返回
        result = response.data;
      }
    } else if (response && typeof response === 'object' && response.content && Array.isArray(response.content)) {
      result = response.content;
    } else {
      // 如果格式不符合预期，记录详细错误
      // console.error('API响应格式异常:', response);
      // console.error('响应类型:', typeof response);
      // if (typeof response === 'object') {
      //   console.error('响应对象的键:', Object.keys(response));
      // }
      // console.warn('接收到的数据格式不符合预期，请检查后端API');
      return [];
    }
    
    return result;
  }).catch(error => {
    throw error; // 重新抛出异常，让调用方处理
  });
}

/**
 * 获取Facebook联系人数据列表（基础列表，无筛选条件）
 * @param {Object} params - 查询参数
 * @returns {Promise} - 返回Promise对象
 */
export function getFacebookList(params) {
  return request({
    url: '/facebook/list',
    method: 'post',
    data: {
      pageNum: params.pageNum || 1,
      pageSize: params.pageSize || 10,
      name: params.name || '',
      email: params.email || '',
      phone: params.phone || '',
      location: params.location || '',
      gender: params.gender || '',
      // 添加完整的筛选参数支持
      currentLocation: params.currentLocation || '',
      hometown: params.hometown || '',
      relationshipStatus: params.relationshipStatus || '',
      workplace: params.workplace || '',
      contactMethod: params.contactMethod || ''
    },
    timeout: 30000
  }).then(response => {
    // 检查响应结构
    if (response && response.code === 200) {
      return response;
    } else {
      return { code: 500, msg: '数据格式错误', data: { total: 0, list: [] } };
    }
  }).catch(error => {
    throw error; // 重新抛出异常，让调用方处理
  });
}

/**
 * 获取符合条件的Facebook联系人数量
 * @param {Object} params 查询参数
 * @returns {Promise} 返回Promise对象
 */
export function getFacebookCount(params) {
  const requestData = { ...params };
  
  return request({
    url: '/facebook/count',
    method: 'post',
    data: requestData,
    headers: {
      'Content-Type': 'application/json'
    }
  })
}

/**
 * 获取用户余额信息
 * @returns {Promise} 返回Promise对象
 */
export function getUserBalanceInfo() {
  return request({
    url: '/balance/info',
    method: 'get'
  }).then(response => {
    return response;
  }).catch(error => {
    throw error;
  });
}

/**
 * 搜索Facebook联系人数据（带筛选条件）
 * @param {Object} params - 搜索参数
 * @returns {Promise} - 返回Promise对象
 */
export function searchFacebook(params) {
  // 构建查询字符串
  let queryString = `keyword=${encodeURIComponent(params.name || params.keyword || '')}&page=${(params.pageNum - 1) || 0}&size=${params.pageSize || 10}`;

  // 添加性别筛选参数
  if (params.gender) {
    queryString += `&gender=${encodeURIComponent(params.gender)}`;
  }

  // 添加当前位置筛选参数
  if (params.currentLocation) {
    queryString += `&currentLocation=${encodeURIComponent(params.currentLocation)}`;
  }

  // 添加家乡筛选参数
  if (params.hometown) {
    queryString += `&hometown=${encodeURIComponent(params.hometown)}`;
  }

  // 添加关系状态筛选参数
  if (params.relationshipStatus) {
    queryString += `&relationshipStatus=${encodeURIComponent(params.relationshipStatus)}`;
  }

  // 添加工作地点筛选参数
  if (params.workplace) {
    queryString += `&workplace=${encodeURIComponent(params.workplace)}`;
  }

  // 添加旧版地区筛选参数（向后兼容）
  if (params.location) {
    queryString += `&location=${encodeURIComponent(params.location)}`;
  }

  // 添加联系方式筛选参数
  if (params.contactMethod) {
    queryString += `&contactMethod=${encodeURIComponent(params.contactMethod)}`;
  }

  // console.log('🔍 Facebook搜索API调用:', {
  //   url: `/facebook/search?${queryString}`,
  //   params: params,
  //   筛选条件: {
  //     currentLocation: params.currentLocation,
  //     hometown: params.hometown,
  //     relationshipStatus: params.relationshipStatus,
  //     workplace: params.workplace
  //   }
  // });

  return request({
    url: `/facebook/search?${queryString}`,
    method: 'get',
    timeout: 30000
  }).then(response => {

    // 检查响应结构
    if (response && response.code === 200) {
      // 确保返回的数据结构正确
      if (!response.data) {
        response.data = { total: 0, list: [] };
      } else if (!response.data.list && Array.isArray(response.data)) {
        // 如果data是数组，转换为标准格式
        const list = response.data;
        response.data = {
          total: list.length,
          list: list
        };
      } else if (!response.data.list) {
        // 如果缺少list属性
        response.data.list = [];
        response.data.total = 0;
      }

      return response;
    } else {
      return { code: 500, msg: '数据格式错误', data: { total: 0, list: [] } };
    }
  }).catch(error => {
    throw error; // 重新抛出异常，让调用方处理
  });
}

/**
 * 获取Facebook联系人详情（通过电话号码）
 * @param {String} phoneNumber - 联系人电话号码 (主键)
 * @returns {Promise} - 返回Promise对象
 */
export function getFacebookDetail(phoneNumber) {
  return request({
    url: `/facebook/detail/${phoneNumber}`,
    method: 'get'
  }).then(response => {
    // 直接返回响应，让组件处理数据结构
    return response;
  }).catch(error => {

    throw error;
  });
}

/**
 * 获取Facebook联系人详情（通过数据表和Facebook ID）
 * @param {Object} params - 查询参数
 * @param {String} params.mysqlTable - 数据表名
 * @param {String} params.facebookId - Facebook ID
 * @returns {Promise} - 返回Promise对象
 */
export function getFacebookDetailByTableAndId(params) {
  return request({
    url: '/facebook/detail',
    method: 'post',
    data: params
  }).then(response => {
    // 直接返回响应，让组件处理数据结构
    return response;
  }).catch(error => {
    throw error;
  });
}

/**
 * 导出Facebook联系人数据
 * @param {Object} params 查询参数
 * @returns {Promise} 导出结果
 */
export function exportFacebookData(params) {
  // 分离参数，exportCount放在URL参数
  const exportCount = params.exportCount;
  delete params.exportCount;
  
  // 确保传递正确的筛选参数
  const requestData = { ...params };
  
  return request({
    url: `/facebook/export?exportCount=${exportCount}`,
    method: 'post',
    data: requestData,
    responseType: 'blob',  // 设置响应类型为blob
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json, application/octet-stream, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    },
    timeout: 60000,  // 设置60秒超时
    retry: 1,  // 添加重试机制
    retryDelay: 1500,  // 重试延迟1.5秒
    meta: {
      isExport: true  // 标记为导出请求
    }
  })
}

/**
 * 添加联系人到线索
 * @param {String} id - 联系人ID (snapchatUsername)
 * @param {String} remark - 备注
 * @returns {Promise} - 返回Promise对象
 */
export function addToLeads(id, remark = '') {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({
        code: 200,
        message: '操作成功',
        data: null
      });
    }, 300);
  });
  
  // 以下是实际API调用的实现，暂时注释掉
  /*
  return request({
    url: `/facebook/add-to-leads/${id}`,
    method: 'post',
    params: { remark }
  });
  */
}

/**
 * 批量添加联系人到线索
 * @param {Array} ids - 联系人ID数组
 * @param {String} remark - 备注
 * @returns {Promise} - 返回Promise对象
 */
export function batchAddToLeads(ids, remark = '') {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({
        code: 200,
        message: '操作成功',
        data: null
      });
    }, 300);
  });
  
  // 以下是实际API调用的实现，暂时注释掉
  /*
  return request({
    url: '/facebook/batch-add-to-leads',
    method: 'post',
    data: {
      ids: ids.join(','),
      remark
    }
  });
  */
}

/**
 * Facebook数据匹配API（原有的直接匹配方式）
 * @param {FormData} formData - 包含匹配类型和Excel文件的FormData对象
 * @returns {Promise} - 返回Promise对象
 */
export function matchFacebookData(formData) {
  const matchType = formData.get('matchType')
  let matchTypeDesc = '未知'
  switch(parseInt(matchType)) {
    case 1:
      matchTypeDesc = '企业+姓名匹配邮箱'
      break
    case 2:
      matchTypeDesc = '企业+姓名匹配手机号'
      break
    case 3:
      matchTypeDesc = '姓名+邮箱匹配手机号'
      break
    case 4:
      matchTypeDesc = '手机号+姓名匹配邮箱'
      break
  }

  return request({
    url: '/facebook/match',
    method: 'post',
    data: formData,
    timeout: 60000, // 设置更长的超时时间，匹配可能需要更多时间
    headers: {
      'Content-Type': 'multipart/form-data', // 使用multipart/form-data发送文件
    }
  }).then(response => {
    // 调试输出原始响应

    // 检查响应结构
    if (response && response.code === 200) {
      return response;
    } else {
      return {
        code: response?.code || 500,
        msg: response?.msg || '匹配失败，请检查上传的文件格式是否正确',
        data: {
          total: 0,
          matched: 0,
          fileUrl: null
        } 
      };
    }
  }).catch(error => {
    throw error; // 重新抛出异常，让调用方处理
  });
}

/**
 * 获取匹配历史记录
 * @param {Object} params - 查询参数
 * @returns {Promise} - 返回Promise对象
 */
export function getMatchRecords(params) {
  return request({
    url: '/facebook/match-records',
    method: 'get',
    params
  });
}

/**
 * 从ES中查询当前所在地数据
 * @param {String} keyword 搜索关键词
 * @returns {Promise} 返回Promise对象
 */
export function searchCurrentLocationsFromES(keyword) {
  return request({
    url: '/facebook/locations/current',
    method: 'get',
    params: { keyword }
  });
}

/**
 * 从ES中查询家乡数据
 * @param {String} keyword 搜索关键词
 * @returns {Promise} 返回Promise对象
 */
export function searchHometownsFromES(keyword) {
  return request({
    url: '/facebook/locations/hometown',
    method: 'get',
    params: { keyword }
  });
}

/**
 * 从ES中查询工作地点数据
 * @param {String} keyword 搜索关键词
 * @returns {Promise} 返回Promise对象
 */
export function searchWorkplacesFromES(keyword) {
  return request({
    url: '/facebook/workplaces',
    method: 'get',
    params: { keyword }
  });
} 